Micron Document
____ _ _ _ _
| _ \ ___ | |_ (_) _ __ ___ __| | (_) __ _
| |_) | / _ \ | __| | | | '_ \ / _ \ / _| | | | / _ |
| _ < | __/ | |_ | | | |_) | | __/ | (_| | | | | (_| |
|_| \_\ \___| \__| |_| | .__/ \___| \__,_| |_| \__,_|
|_|


The NomadNet German Wikipedia | Archives | Info
- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b

🔍 Search

ÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻ

Constraintprogrammierung
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
top
Die Constraintprogrammierung (englisch Constraint Programming, CP) ist ein Programmierparadigma, das seit Mitte der 1980er Jahre entwickelt wird und als Weiterentwicklung der logischen Programmierung entstanden ist. Die Constraint-basierte Programmierung erlaubt die Integration von Constraints und ihren Lösungsmechanismen in eine Programmiersprache. Mittlerweile ist sie ein eigenstĂ€ndiger Bereich der kĂŒnstlichen Intelligenz und hat vielfĂ€ltige Anwendungsgebiete in Praxis und Wissenschaft.

Bei der Constraintprogrammierung beschreibt der Nutzer das Problem auf deklarative Weise, wĂ€hrend der Lösungsprozess aus Nutzersicht in den Hintergrund tritt. Dieser wird vom Constraint-Löser ĂŒbernommen. FĂŒr Eugene Freuder stellt das Paradigma deshalb die bisher grĂ¶ĂŸte AnnĂ€herung an den „Heiligen Gral“ der Programmierung dar: Der Nutzer statuiert das Problem, der Computer löst es.cite-ref-1[1]

Contents

‱ Literatur
‱ Weblinks

──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Constraints

→

Hauptartikel

:

Constraint

Der Begriff Constraint bedeutet in etwa Zwang oder Nebenbedingung. Es handelt sich um spezielle prÀdikatenlogische Formeln, die Bedingungen oder EinschrÀnkungen beschreiben. Im mathematischen Sinn sind damit auch Nebenbedingungen gemeint, wie sie beispielsweise bei der Lösung mathematischer Optimierungsprobleme Anwendung finden.

Man kann zum Beispiel die Umrechnungsformel von Grad Celsius in Grad Fahrenheit als ein Constraint auffassen: F = 1 , 8 × × C + 32 {\displaystyle F=1{,}8\times C+32} . Durch die Belegung der Variablen mit Werten wird das Constraint entweder erfĂŒllt (true) oder nicht erfĂŒllt (false). Die Umrechnung ist beispielsweise mit F = 68 {\displaystyle F=68} und C = 20 {\displaystyle C=20} erfĂŒllt, wĂ€hrend F = 1 {\displaystyle F=1} und C = 1 {\displaystyle C=1} das Constraint offensichtlich verletzt.

Das Constraint X 2 ≄ ≄ 0 ∧ ∧ X ∈ ∈ R {\displaystyle X^{2}\geq 0\land X\in \mathbb {R} } ist unabhĂ€ngig von einer Wertebelegung immer erfĂŒllt, das Constraint X 2 < 0 ∧ ∧ X ∈ ∈ R {\displaystyle X^{2}<0\land X\in \mathbb {R} } dagegen nie.cite-ref-2[2]

Ein weiteres Beispiel ist ein pythagoreisches Tripel, das von drei natĂŒrlichen Zahlen x {\displaystyle x} , y {\displaystyle y} und z {\displaystyle z} gebildet wird, welche die SeitenlĂ€nge eines rechtwinkligen Dreiecks angeben. Eine Constraint-basierte Modellierung solcher Tripel ĂŒber dem Definitionsbereich { 1 , 
 
 , 100 } {\displaystyle \{1,\dots ,100\}} kann durch folgende Constraint-Konjunktion dargestellt werden:

x 2 + y 2 = z 2 ∧ ∧ x , y , z ∈ ∈ { 1 , 
 
 , 100 } {\displaystyle x^{2}+y^{2}=z^{2}\land x,y,z\in \{1,\dots ,100\}}

Eine mögliche Lösung ist das Tripel ( x , y , z ) = ( 3 , 4 , 5 ) {\displaystyle (x,y,z)=(3,4,5)} .cite-ref-3[3]

ErfĂŒllbarkeit und Lösungen

Nachdem man ein Problem durch Constraints beschrieben hat, möchte man herausfinden, ob die Constraints erfĂŒllbar sind. ZusĂ€tzlich können mögliche Lösungen von Interesse sein. Die Fragen nach der ErfĂŒllbarkeit von Constraints und nach konkreten Lösungen sind eng miteinander verbunden. Ist ein Constraint erfĂŒllbar, so gibt es mindestens eine Lösung. Allerdings gestaltet sich die Berechnung einer Lösung oft komplizierter als die Feststellung der ErfĂŒllbarkeit.cite-ref-4[4]

Eine „naive“ Herangehensweise zur Entscheidung der ErfĂŒllbarkeit und zur Berechnung konkreter Lösungen wĂ€re, alle möglichen Belegungen der Variablen mit Werten durchzuprobieren. Allerdings ist die Anzahl möglicher Belegungen oft sehr groß oder unendlich, sodass diese Vorgehensweise scheitert. Deshalb kommen in vielen Situationen spezielle Algorithmen zur Behandlung von Constraints zum Einsatz.

Constraint-Löser sind Algorithmen, die Tests und Operationen auf Constraints zur VerfĂŒgung stellen. Diese können hĂ€ufig nicht nur die ErfĂŒllbarkeit prĂŒfen und konkrete Lösungen berechnen, sondern auch weitere Operationen auf Constraints durchfĂŒhren.cite-ref-5[5]

Constraint-Systeme

Aus formaler Sicht stellen Constraints spezielle prĂ€dikatenlogische Formeln dar, mit deren Hilfe man Eigenschaften von Problemen und deren Lösung beschreibt.cite-ref-6[6] Dazu gehören Gleichungen und Ungleichungen ĂŒber Zahlen, aber auch andere AusdrĂŒcke ĂŒber Zahlen, boolesche Werte oder beliebige andere Mengen wie Buchstaben oder Wörter.

Constraint-Löser funktionieren in der Regel nur auf einer speziellen Klasse von Constraints. Diese werden durch Constraint-Systeme klassifiziert. Dadurch lassen sich den Constraint-Systemen passende Lösungsmechanismen zuordnen.cite-ref-7[7]

Typische Constraint-Systeme sind:

‱ Lineare Gleichungssysteme: eine Menge linearer Gleichungen mit einer oder mehreren Unbekannten, die alle gleichzeitig erfĂŒllt sein sollen. Um ein Gleichungssystem zu lösen, kann auf eine Vielzahl von Lösungsverfahren zurĂŒckgegriffen werden, z. B. das gaußsche Eliminationsverfahren.

‱ Lineare Optimierung: die Optimierung linearer Zielfunktionen ĂŒber einer Menge, die durch lineare Gleichungen und Ungleichungen eingeschrĂ€nkt ist. Ein Algorithmus, der in der Praxis hĂ€ufig zur Lösung solcher Probleme Anwendung findet, ist das Simplex-Verfahren.

‱ Boolesche Constraints: Boolesche Gleichungen, deren Variable entweder die GĂŒltigkeit einer Aussage (true) oder deren UngĂŒltigkeit (false) reprĂ€sentieren. Ein Löser fĂŒr Boolesche Constraints ist grundlegend fĂŒr alle Probleme, die als aussagenlogische ErfĂŒllbarkeitsprobleme formuliert sind. Normalerweise unterstĂŒtzt ein Boolescher Constraint-Löser logische Operationen wie Negation, Konjunktion, Disjunktion, Implikation und Äquivalenz.cite-ref-8[8]

‱ Finite-Domain-Constraints: Diese haben die Eigenschaft, dass den beteiligten Variablen von vornherein endliche Wertebereiche (engl. finite domains) zugeordnet sind. Dieses Constraint-System wurde in der Forschung eingehend untersucht. Es hat in der Praxis große Bedeutung bei der Lösung kombinatorischer Probleme, z. B. zur Behandlung von Planungs-, Diagnose- und Konfigurationsproblemen.cite-ref-9[9]

Constraint-basierte Programmierung

Die Constraint-basierte Programmierung erlaubt die Integration von Constraints und ihren Lösungsmechanismen in eine Programmiersprache. DarĂŒber hinaus ermöglicht sie in der Regel die Definition neuer Constraints. Constraint-Bibliotheken erlauben die funktionale und syntaktische Erweiterung einer existierenden Sprache um Constraints unter Ausnutzung existierender Sprachkonzepte. Eine Constraint-basierte Sprache ist eine semantische Erweiterung einer existierenden Sprache um neue Konzepte und Auswertungsmechanismen bis hin zu einem vollstĂ€ndigen Neuentwurf.cite-ref-10[10]

UrsprĂŒnglich entwickelte sich die Constraint-basierte Programmierung als Erweiterung der logischen Programmierung. Mittlerweile ist sie ein eigenstĂ€ndiger Bereich der kĂŒnstlichen Intelligenz und hat vielfĂ€ltige Anwendungsgebiete in Praxis und Wissenschaft.

Constraint-logische Programmierung

Die logische Programmierung arbeitet auf Basis einer Wissensdatenbank, aus der die Lösung von Anfragen hergeleitet wird. Bei der Auswertung von Anfragen werden die PrĂ€dikate mit Hilfe der Resolution abgeleitet. Constraint-logische Programme unterscheiden sich von logischen Programmen nur insofern, als sie in den rechten Seiten der Klauseln und in Anfragen neben logischen PrĂ€dikaten auch Constraints zulassen, die mit Hilfe von Constraint-Lösern auf ErfĂŒllbarkeit ĂŒberprĂŒft werden.cite-ref-11[11]

Die Syntax Constraint-logischer Programme unterscheidet sich nicht wesentlich von logischen Programmen. Es sind lediglich auch Constraints in den rechten Seiten der Regeln und in den Anfragen zulĂ€ssig. WĂ€hrend logische PrĂ€dikate weiterhin durch Unifikation behandelt werden, werden die zusĂ€tzlichen Constraints gesammelt, in den Constraint-Speicher ĂŒbertragen und von einem Constraint-Löser behandelt. Constraint-logische Programme lassen oft verschiedene Constraint-DomĂ€nen (z. B. FD-Constraints, arithmetische Constraints oder boolesche Constraints) mit entsprechenden Lösungsverfahren zu, die dann beispielsweise in Form von Bibliotheken vorliegen.cite-ref-12[12]

Typische Constraint-logische Sprachen, die eine Generalisierung der logischen Sprachen darstellen, sind zum Beispiel ECLiPSecite-ref-13[13], CHIPcite-ref-14[14] und SICStus-Prologcite-ref-15[15].

NebenlÀufige Constraint-logische Programmierung

Die nebenlĂ€ufige Constraint-logische Programmierung (engl. Concurrent Constraint Logic Programming, CCLP) integriert das Konzept der NebenlĂ€ufigkeit in die Constraint-logische Programmierung. NebenlĂ€ufigkeit ist die Eigenschaft eines Systems, mehrere Berechnungen, Anweisungen oder Befehle gleichzeitig ausfĂŒhren zu können. Das System verzichtet dadurch auf Sequentialisierung. Dies ist dann möglich, wenn die betreffenden Aktionen voneinander kausal unabhĂ€ngig sind, d. h. keine Aktion das Resultat einer anderen benötigt. UnabhĂ€ngige Aktionen können entweder in beliebiger Reihenfolge sequentiell abgearbeitet werden oder echt parallel auf mehreren Rechnern gleichzeitig ausgefĂŒhrt werden.

Das Modell der nebenlĂ€ufigen Constraint-Programmierung kann auch mit partiellen Informationen ĂŒber Variablenbelegungen arbeiten. Statt konkreter Daten fĂŒr Variablen können auch Bedingungen auf diesen festgelegt werden.cite-ref-16[16]

Eine multiparadigmatische Programmiersprache, die unter anderem deklarative, parallele und Constraint-basierte AnsÀtze vereint, ist beispielsweise Oz.

Constraint-imperative Programmierung

Die Constraint-imperative Programmierung vereinigt die beiden Paradigmen Constraintprogrammierung und imperative Programmierung. In imperativen Sprachen beschreibt der Programmierer, wie ein gegebenes Problem durch eine Sequenz von Anweisungen gelöst wird. Sie eignet sich besonders zur Modellierung von zeitlichen AblÀufen. Dagegen konzentriert sich der Programmierer in der Constraintprogrammierung auf das Was, d. h., er beschreibt das Problem durch deren Eigenschaften in Form von Constraints. Die Kombination der imperativen Programmierung mit deklarativen Constraints stellt somit eine besondere Herausforderung dar.cite-ref-17[17]

Ein Beispiel fĂŒr eine Constraint-imperative Programmiersprache ist Turtle.cite-ref-18[18] Diese entstand als eine einfache imperative Basissprache und wurde zunĂ€chst um funktionale Konzepte wie Funktionen höherer Ordnung erweitert. Danach wurde sie mit vier wesentlichen Konzepten zur Constraint-Programmierung angereichertcite-ref-19[19]:

‱ Constraint-Variablen: Diese unterscheiden sich von „normalen“ imperativen Variablen, deren Werte durch Zuweisungen festgelegt werden, dadurch, dass ihre Werte durch Constraints festgelegt bzw. eingeschrĂ€nkt werden. Constraint-Variablen werden auch als deklarative Variablen bezeichnet.

‱ Constraint-Anweisungen: Eine Constraint-Anweisung kann mehrere durch den and-Operator verknĂŒpfte Constraints enthalten. Mit AusfĂŒhrung der require-Anweisung werden die Constraints zum Constraint-Speicher des Constraint-Lösers hinzugefĂŒgt. Der Löser prĂŒft die ErfĂŒllbarkeit der Constraint-Konjunktionen und weist eine Lösung den Constraint-Variablen zu.

‱ Nutzer-definierte Constraints: Diese abstrahieren von Constraints wie Funktionen von AusdrĂŒcken. Sie dienen der Definition hĂ€ufig auftretender Muster, um den Programmieraufwand zu verringern und die Lesbarkeit der Programme zu verbessern.

‱ Constraint-Löser: Diese sind dafĂŒr verantwortlich, die mit require ausgefĂŒhrten Constraints zu verwalten und Lösungen zu berechnen. Sind die Constraints im Speicher zusammen unerfĂŒllbar, wird eine Exception ausgelöst.

Die C++-Bibliothek Turtle++ hat viele Konstrukte von Turtle ĂŒbernommen und fĂŒr eine harmonische Integration in C++ angepasst.

Constraint-objektorientierte Programmierung

Die Einbettung von Constraints in objektorientierte Programmiersprachen wird als Constraint-objektorientierte Programmierung bezeichnet.

FĂŒr die objektorientierte Programmiersprache Java existiert die Bibliothek firstcs zur objektorientierten Constraintprogrammierung. Ihr Kern bildet eine Klasse namens CS (Constraint-Solver). Jedes Objekt dieser Klasse besitzt und verwaltet Variablen ĂŒber endlichen, ganzzahligen DomĂ€nen und Constraints ĂŒber diesen Variablen. Aufgrund des objektorientierten Designs der Bibliothek ist es möglich, in einem Programm mehrere Constraint-Systeme gleichzeitig zu generieren und zu manipulieren, die jedoch gegenwĂ€rtig nur voneinander unabhĂ€ngige CSP reprĂ€sentieren können. Des Weiteren gibt es die Klassen Domain, Variable, Constraint und die Unterklassen von Constraint, die um den Kern herum die grundlegenden Methoden und Verfahren zur Modellierung und Lösung von CSP bereitstellen.cite-ref-20[20]

Als ein weiterer Ansatz entstand die Programmiersprache Kaleidoscope, die Constraints in einen imperativen objektorientierten Stil integriert. Es ist eine der ersten Sprachen, bei der Constraints zwischen Attributen verschiedener Objekte spezifiziert werden.cite-ref-21[21]

Des Weiteren ist Koalog eine bekannte Java-Bibliothek fĂŒr Finite-Domain-Constraints und Ilog-Solver eine C++-Bibliothek fĂŒr verschiedene DomĂ€nen.

Anwendungen

Im wissenschaftlichen Bereich findet die Constraint-basierte Programmierung beispielsweise bei der Verarbeitung natĂŒrlicher Sprache, im maschinengestĂŒtzten Beweisen, in der Analyse von Programmen und in der Molekularbiologie Anwendung. In der industriellen Praxis sind typische Anwendungen Optimierungsprobleme und Scheduling-Aufgaben, Schaltkreis-Design und -Verifikation, graphische Systeme und Benutzerschnittstellen.cite-ref-22[22]

Literatur

‱ FrĂ©dĂ©ric Benhamou, Narendra Jussien, Barry O’Sullivan: Trends in constraint programming. John Wiley and Sons: London/Newport Beach, 2007.
‱ Thom FrĂŒhwirth, Slim Abdennadher: Constraint-Programmierung: Grundlagen und Anwendungen. Springer-Verlag: Berlin/Heidelberg, 1997, ISBN 3-540-60670-X
‱ Petra Hofstedt, Armin Wolf: EinfĂŒhrung in die Constraint-Programmierung. (Springer eXamen-press) Springer-Verlag: Berlin/Heidelberg, 2007, ISBN 978-3-540-23184-4
‱ Francesca Rossi, Peter van Beek, Toby Walsh (Hrsg.): Handbook of Constraint Programming. Elsevier: Amsterdam et al., 2006.

Weblinks

‱ Association for Constraint Programming

Einzelnachweise

cite-note-11. ↑ Eugene C. Freuder: In Pursuit of the Holy Grail. In: Constraints 2 (1), 1997, S. 57–61; Petra Hofstedt: Kapitel Constraints. In: GĂŒnther Görz, Josef Schneeberger, Ute Schmid (Hrsg.): Handbuch der KĂŒnstlichen Intelligenz. 5. ĂŒberarbeitete und aktualisierte Auflage. Oldenbourg Verlag: MĂŒnchen, 2014, S. 206.
cite-note-22. ↑ Hofstedt, Wolf: EinfĂŒhrung in die Constraint-Programmierung. 2007, S. 51–52.
cite-note-33. ↑ Petra Hofstedt: Kapitel Constraints. In: GĂŒnther Görz, Josef Schneeberger, Ute Schmid (Hrsg.): Handbuch der KĂŒnstlichen Intelligenz. 5. ĂŒberarbeitete und aktualisierte Auflage. Oldenbourg Verlag: MĂŒnchen, 2014, S. 205.
cite-note-44. ↑ Hofstedt, Wolf: EinfĂŒhrung in die Constraint-Programmierung. 2007, S. 58.
cite-note-55. ↑ Hofstedt, Wolf: EinfĂŒhrung in die Constraint-Programmierung. 2007, S. 60.
cite-note-66. ↑ FĂŒr eine formale Definition von Constraints siehe Hofstedt, Wolf: EinfĂŒhrung in die Constraint-Programmierung. 2007, S. 54–55.
cite-note-77. ↑ Hofstedt, Wolf: EinfĂŒhrung in die Constraint-Programmierung. 2007, S. 53–55.
cite-note-88. ↑ Hofstedt, Wolf: EinfĂŒhrung in die Constraint-Programmierung. 2007, S. 177.
cite-note-99. ↑ Hofstedt, Wolf: EinfĂŒhrung in die Constraint-Programmierung. 2007, S. 57, 71.
cite-note-1010. ↑ Petra Hofstedt: Kapitel Constraints. In: GĂŒnther Görz, Josef Schneeberger, Ute Schmid (Hrsg.): Handbuch der KĂŒnstlichen Intelligenz. 5. ĂŒberarbeitete und aktualisierte Auflage. Oldenbourg Verlag: MĂŒnchen, 2014, S. 220.
cite-note-1111. ↑ Hofstedt, Wolf: EinfĂŒhrung in die Constraint-Programmierung. 2007, S. 127–133.
cite-note-1212. ↑ Petra Hofstedt: Kapitel Constraints. In: GĂŒnther Görz, Josef Schneeberger, Ute Schmid (Hrsg.): Handbuch der KĂŒnstlichen Intelligenz. 5. ĂŒberarbeitete und aktualisierte Auflage. Oldenbourg Verlag: MĂŒnchen, 2014, S. 221.
cite-note-1313. ↑ The ECLiPSe Constraint Programming System
cite-note-1414. ↑ Coystec: CHIP V5
cite-note-1515. ↑ SICStus: SICStus Prolog
cite-note-1616. ↑ Hofstedt, Wolf: EinfĂŒhrung in die Constraint-Programmierung. 2007, S. 141–162.
cite-note-1717. ↑ Hofstedt, Wolf: EinfĂŒhrung in die Constraint-Programmierung. 2007, S. 185.
cite-note-1818. ↑ catamorph.de: Turtle – eine constraint-imperative Programmiersprache (Memento vom 8. April 2016 im Internet Archive)
cite-note-1919. ↑ Hofstedt, Wolf: EinfĂŒhrung in die Constraint-Programmierung. 2007, S. 185–192.
cite-note-2020. ↑ Hofstedt, Wolf: EinfĂŒhrung in die Constraint-Programmierung. 2007, S. 199–215.
cite-note-2121. ↑ Gus Lopez, Bjorn Freeman-Benson, Alan Borning: Kaleidoscope: A Constraint Imperative Programming Language. In: Brian Mayoh, Enn Tyugu, Jaan Penjam: Constraint Programming. Springer-Verlag, S. 313–329.
cite-note-2222. ↑ Petra Hofstedt: Kapitel Constraints. In: GĂŒnther Görz, Josef Schneeberger, Ute Schmid (Hrsg.): Handbuch der KĂŒnstlichen Intelligenz. 5. ĂŒberarbeitete und aktualisierte Auflage. Oldenbourg Verlag: MĂŒnchen, 2014, S. 206.